package com.isoft.mapper;

import com.isoft.entity.DfmeSflgEntity;
import lombok.Data;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * DfmeSflgMapper.java  --程文静
 * 共享航班相关数据库操作的 MyBatis 映射接口。
 * 负责插入航班基础信息、批量插入共享航班等操作。
 */
@Mapper
/**
 * 共享航班相关数据库操作接口。
 */
public interface DfmeSflgMapper {
    /**
     * 插入消息元数据。
     * @param entity 消息元数据实体
     */
    @Insert("INSERT INTO MSG_META(SENDER, RECEIVER, SEQUENCE_NUMBER, DATE_TIME, MSG_TYPE, SUB_TYPE) VALUES(#{entity.meta.sender}, #{entity.meta.receiver}, #{entity.meta.sequenceNumber}, #{entity.meta.dateTime}, #{entity.meta.type}, #{entity.meta.subType})")
    @Options(useGeneratedKeys = true, keyProperty = "entity.meta.msgId", keyColumn = "MSG_ID")
    void insertMeta(@Param("entity") DfmeSflgEntity entity);

    /**
     * 插入航班基础信息。
     * @param entity 航班实体
     * @return 插入结果
     */
    @Insert("INSERT INTO FLIGHT_BASE(FLIGHT_ID, FLIGHT_FILE_ID, FLIGHT_IDENTIFIER) " +
            "VALUES(" +
            "#{dflt.flightId,jdbcType=NUMERIC}, " +
            "#{dflt.flightFileId,jdbcType=VARCHAR}, " +
            "#{dflt.flightIdentifier,jdbcType=VARCHAR})")
    int insertFlightBase(DfmeSflgEntity entity);

    /**
     * 批量插入共享航班信息。
     * @param sharedFlights 共享航班DTO列表
     * @return 插入结果
     */
    @Insert({
            "<script>",
            "INSERT INTO SHARED_FLIGHT(FLIGHT_ID, AIRLINE_CODE, FLIGHT_NUMBER) ",
            "VALUES ",
            "<foreach collection='list' item='item' separator=','>",
            "(",
            "#{item.flightId,jdbcType=NUMERIC}, ",
            "#{item.airlineCode,jdbcType=VARCHAR}, ",
            "#{item.flightNumber,jdbcType=VARCHAR})",
            "</foreach>",
            "</script>"
    })
    int batchInsertSharedFlights(@Param("list") List<SharedFlightDto> sharedFlights);

    /**
     * 共享航班DTO。
     */
    @Data
    class SharedFlightDto {
        /** 航班ID */
        private Long flightId;
        /** 航空公司代码 */
        private String airlineCode;
        /** 航班号 */
        private String flightNumber;
    }
}